﻿using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Windows.Forms;
using VentaElectrodomesticos.Facturacion;
using VentaElectrodomesticos.Sql;
using VentaElectrodomesticos.Utilities;
using VentaElectrodomesticos.EfectuarPago;

namespace VentaElectrodomesticos.AbmCliente
{
    public partial class FormSeleccionCliente : Form
    {
        private ClaseSQL sql = new ClaseSQL();
        private Form formReceptor;
        private String tipoFormReceptor;
        private bool mostrarDeshabilitados;

        public FormSeleccionCliente(Form _formReceptor, String _tipoFormReceptor, bool mostrarDeshabilitados)
        {
            InitializeComponent();
            sql.llenarCombo(cbProvincia,"SELECT idProvincia, nomProvincia FROM LAG.provincias");
            this.formReceptor = _formReceptor;
            this.tipoFormReceptor = _tipoFormReceptor;
            this.mostrarDeshabilitados = mostrarDeshabilitados;

            if (tipoFormReceptor.Equals("modificacion"))
            {
                this.Text = "Formulario de seleccion de clientes a modificar";
                this.seleccionar.HeaderText = "Seleccionar";
                this.seleccionar.Text = "Seleccionar";
                this.seleccionar.UseColumnTextForButtonValue = true;
            }
            else if (tipoFormReceptor.Equals("baja"))
            {
                this.Text = "Formulario de baja de clientes";
                this.seleccionar.HeaderText = "Eliminar";
                this.seleccionar.Text = "Eliminar";
                this.seleccionar.UseColumnTextForButtonValue = true;
            }
        }

        private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            // Ignorar clicks que no son en la columna seleccionar 
            if (e.RowIndex < 0 || e.ColumnIndex != dataGridView1.Columns["seleccionar"].Index) return;

            Cliente cliente = new Cliente(dataGridView1.Rows[e.RowIndex]);

            if (tipoFormReceptor.Equals("modificacion"))
            {
                FormModificacionCliente formEdicionCliente = new FormModificacionCliente(cliente);
                formEdicionCliente.ShowDialog(this);
            }
            else if (tipoFormReceptor.Equals("baja"))
            {
                sql.bajaRegistro("LAG.personas", "idPersona", cliente.id.ToString());
            }
            else if (tipoFormReceptor.Equals("facturacion"))
            {
                FormFacturacion formFacturacion = (FormFacturacion)formReceptor;
                formFacturacion.recibirCliente(cliente);
                this.Close();
            }
            else if (tipoFormReceptor.Equals("pago"))
            {
                FormEfectuarPago formEfectuarPago = (FormEfectuarPago)formReceptor;
                formEfectuarPago.recibirCliente(cliente);
                this.Close();
            }
            
        }

        private void btnLimpiar_Click(object sender, EventArgs e)
        {
            Utils.ClearTextBoxes(this);
            cbProvincia.SelectedIndex = -1;
            dataGridView1.Rows.Clear();
        }

        private void btnBuscar_Click(object sender, EventArgs e)
        {
            try
            {
                dataGridView1.Rows.Clear();
                sql.Open();

                String condiciones = "";
                condiciones += Utils.agregarCondicionExacta(condiciones, "dni", tbDni.Text, true);
                condiciones += Utils.agregarCondicion(condiciones, "nombre", tbNombre.Text);
                condiciones += Utils.agregarCondicion(condiciones, "apellido", tbApellido.Text);
                condiciones += Utils.agregarCondicion(condiciones, "mail", tbMail.Text);
                condiciones += Utils.agregarCondicion(condiciones, "telefono", tbTelefono.Text);
                condiciones += Utils.agregarCondicion(condiciones, "direccion", tbDireccion.Text);
                condiciones += Utils.agregarCondicionConKeyValue(condiciones, "pers.idProvincia", cbProvincia.SelectedItem);
                if (!mostrarDeshabilitados)
                {
                    condiciones += Utils.agregarCondicionExacta(condiciones, "pers.status", "1", false);
                }
                

                String query = "SELECT idPersona, dni, nombre, apellido, mail, telefono, direccion, nomProvincia, pers.status, pers.idProvincia FROM LAG.vw_clientes pers LEFT JOIN LAG.provincias prov ON pers.idProvincia = prov.idProvincia" + condiciones;

                
                
                SqlDataReader reader = sql.busquedaSQLDataReader(query);
                while (reader.Read())
                {
                    dataGridView1.Rows.Add(
                        reader["idPersona"],
                        reader["dni"].ToString(),
                        reader["nombre"].ToString(),
                        reader["apellido"].ToString(),
                        reader["mail"].ToString(),
                        reader["telefono"].ToString(),
                        reader["direccion"].ToString(),
                        reader["nomProvincia"].ToString(),
                        reader["status"],
                        reader["idProvincia"]
                    );
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error al buscar cliente");
            }
            finally
            {
                sql.Close();
            }
        }

        private void ingresarSoloNumericos(object sender, KeyPressEventArgs e)
        {
            if (!System.Text.RegularExpressions.Regex.IsMatch(e.KeyChar.ToString(), "[0-9\b]+"))
                e.Handled = true;
        }

    }
}
